本文介紹如何設定Subversion目錄及檔案存取控制權限
[Lab Information]
測試環境設定檔如下:
Apache Authentication Configure File: /etc/htpasswd.user
Subversion Apache Configure File: /etc/httpd/conf.d/subversion.conf
SVN Permission Configure File: /usr/local/svn/staging/conf/authz
主機帳號密碼資訊如下:
Subversion system IP: 192.168.0.101
Subversion user/[password]:
・godspeedyen/[godspeedyen]
・alice/[alice]
・kevin/[kevin]
TortoiseSVN_Test填入資訊如下:
Repository URL: http://192.168.0.101/svn/staging
Working copy directory of client: D:\Godspeed.Yen\Desktop\TortoiseSVN_Test
[Setting permission of Subversion]
若未針對專案目錄設定存取控制權限,則每位使用者皆可以透過TortoiseSVN Tools執行Checkout/Commit等作業,故可執行下列步驟來設定Subversion目錄及檔案存取控制權限:
編輯檔案:/etc/httpd/conf.d/subversion.conf,讓Web Server能套用使用者權限,設定方式如下:
vi /etc/httpd/conf.d/subversion.conf
#Append the following lines in the <Location /svn/> tags of "/etc/httpd/conf.d/subversion.conf" file.
AuthzSVNAccessFile /usr/local/svn/staging/conf/authz
重新啓動Apache daemon:
/etc/init.d/httpd restart
編輯檔案:/usr/local/svn/staging/conf/authz,進行使用者權限設定
該設定檔內已提供簡單的範例,可依需求並參照範例進行異動,如下所示:
vi /usr/local/svn/staging/conf/authz
#Append the following lines in "/usr/local/svn/staging/conf/authz" file.
'#建立群組godspeedyen_and_alice,該群組成員包含godspeedyen及alice#'
[groups]
godspeedyen_and_alice = godspeedyen,alice
'#所有群組及使用者皆可對staging repository的/目錄執行read#'
[staging:/]
* = r
'#群組godspeedyen_and_alice可對staging repository的/branches目錄執行read#'
'#使用者kevin無法對此目錄執行任何動作#'
[staging:/branches]
@godspeedyen_and_alice = r
kevin =
'#所有群組及使用者皆無法對staging repository的/tags目錄執行任何動作#'
[staging:/tags]
* =
'#群組godspeedyen_and_alice可對staging repository的/trunk目錄執行read and write#'
'#使用者kevin無法對此目錄做任何動作#'
[staging:/trunk]
@godspeedyen_and_alice = rw
kevin =
'#群組godspeedyen_and_alice可對staging repository的/trunk/aaa目錄執行read#'
'#使用者godspeedyen可對此目錄執行read and write#'
'#使用者kevin可對此目錄執行read#'
[staging:/trunk/aaa]
@godspeedyen_and_alice = r
godspeedyen = rw
kevin = r
'#群組godspeedyen_and_alice可對staging repository的/trunk/aaa/aaa.txt檔案執行read and write#'
'#使用者kevin可對此檔案執行read and write#'
[staging:/trunk/aaa/aaa.txt]
@godspeedyen_and_alice = rw
kevin = rw
[Testing by Http and TortoiseSVN]
Read部分可透過瀏覽器進行測試驗證,請於網址列中輸入:http://192.168.0.101/svn/staging
結果如下敘述:
・所有群組及使用者皆可對staging repository的/目錄執行read
・群組godspeedyen_and_alice成員可對staging repository的/branches目錄執行read
・群組godspeedyen_and_alice成員可對staging repository的/trunk目錄執行read
・群組godspeedyen_and_alice成員可對staging repository的/trunk/aaa目錄執行read
・群組godspeedyen_and_alice成員可對staging repository的/trunk/aaa/aaa.txt檔案執行read
・使用者kevin可對staging repository的/trunk/aaa目錄執行read
・使用者kevin可對staging repository的/trunk/aaa/aaa.txt檔案執行read
Write部分可使用TortoiseSVN進行測試,結果如下敘述:
・群組godspeedyen_and_alice成員可對staging repository的/trunk目錄執行write
・群組godspeedyen_and_alice成員可對staging repository的/trunk/aaa/aaa.txt檔案執行write
・使用者godspeedyen可對staging repository的/trunk/aaa目錄執行write
・使用者kevin可對staging repository的/trunk/aaa/aaa.txt檔案執行write
其他動作執行結果如下敘述:
・所有群組及使用者皆無法對staging repository的/tags目錄執行任何動作
・使用者kevin無法對staging repository的/branches目錄執行任何動作
・使用者kevin無法對staging repository的/trunk目錄執行任何動作
Cimmit測試項目及其對應結果如下:
a. 使用者alice提交\trunk\aaa\alice目錄至staging repository的/trunk/aaa目錄:
b. 使用者godspeedyen提交\trunk\aaa\godspeedyen目錄至staging repository的/trunk/aaa目錄:
c. 使用者kevin提交\trunk\aaa\aaa.txt檔案至staging repository的/trunk/aaa/aaa.txt檔案:
d. 使用者kevin透過瀏覽器讀取staging repository的/trunk/aaa/aaa.txt檔案:
[Reference]
Subversion Online Documentation
Access Control for Subversion with Apache2 and Authz
Subversion Authz Examples